#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sched.h>  // 包含实时调度相关函数

// 实时任务：无限循环（抢占 CPU）
void realtime_task(int priority) 
{
    printf("实时进程：启动，优先级 = %d，PID = %d\n", priority, getpid());
    while (1) {
        // 空循环，抢占 CPU（实时进程会优先获得 CPU）
    }
}

int main() 
{
    // 创建 2 个实时子进程，设置不同优先级
    for (int i = 0; i < 2; i++) 
    {
        pid_t pid = fork();
        if (pid < 0) 
        {
            perror("fork 失败");
            exit(1);
        } 
        else if (pid == 0) 
        {
            struct sched_param param;
            // 设置实时优先级（1 最低，99 最高）
            param.sched_priority = (i == 0) ? 50 : 10;  // 进程 0 优先级高于进程 1
            
            // 设置实时调度策略（SCHED_FIFO：先进先出，一旦获得 CPU 会一直运行直到阻塞）
            if (sched_setscheduler(0, SCHED_FIFO, &param) == -1) 
            {
                perror("设置实时优先级失败（需要 root 权限）");
                exit(1);
            }
            realtime_task(param.sched_priority);
            exit(0);
        }
    }

    // 父进程：等待
    while (1) 
    {
        sleep(1);
    }
    return 0;
}
